﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LogicaControl;
using ModeloEntidades;
using System.Text.RegularExpressions;
//using Interfaces._Funciones;

namespace Interfaces.Consultorio
{
    public partial class UI_Consultorio : Form
    {
        /**************************************************************
        //                       D E L E G A D O S
        **************************************************************/
        public delegate void buscarProfesional(BindingSource unBinding_para_profesional , int sender);
    

        /**************************************************************
        //                         E V E N T O S
        **************************************************************/
        public event buscarProfesional cuandoBusco_profesional;
  

        /**************************************************************
        //                  E N U M E R A C I O N E S
         **************************************************************/
        private enum Modalidad { nuevo, edicion };
        private enum EstadosTramites { en_curso, habilitado, rematriculando };
        private enum EstadosPestañasTitular { inicial, profesional_colegio, profesional_otro_colegio };
        private enum EstadosPestañaTitular { sin_cambia_titular, con_cambia_titular };
        public  enum Sender { titular, profesionales };
        /**************************************************************
        //                      A T R I B U T O S
         **************************************************************/
        private Controlador_Habilitacion  control_habilitacion = new Controlador_Habilitacion();
        private Controlador_Profesionales control_profesional  = new Controlador_Profesionales();
        private Controlador_Localidades   control_localidades  = new Controlador_Localidades();
        private Controlador_Profesiones   control_profesiones  = new Controlador_Profesiones();
        //---------------------------------------------------------------------------------------
        private Habilitacion actual_habilitacion;
        private Tramite_Matriculacion actual_tramite;
        private ModeloEntidades.Consultorio actual_consultorio;
        private Local actual_local;
        private Localidad actual_localidad;
        private Propietario actual_propietario;
        //---------------------------------------------------------------------------------------
        private List<Profesional> lista_profecionales_eliminados = new List<Profesional>();
        //---------------------------------------------------------------------------------------
        private TabPage pestañaTitular_inicio;
        private TabPage pestañaTitular_colegio;
        private TabPage pestañaTitular_otro_colegio;
        //.........................................................................................
        private TabPage pestaña_Alta;
        private TabPage pestaña_Habilitacion;
        private TabPage pestaña_rematriculacion;
        private TabPage pestaña_Profesionales;
        private TabPage pestaña_requisitos;
        //---------------------------------------------------------------------------------------
        private Modalidad tipo;
        private EstadosTramites estadoTramite;
        private EstadosPestañasTitular pestañasTitular;
        private EstadosPestañaTitular pestañaTitular;

        /**************************************************************
        //                  V A R I A B L E S  G L O B A L E S
        ****************************************************************/
        // true = campos activado
        // false= campos desactivados
        bool validador = true;        
        /**************************************************************
        //                  C O N S T R U C T O R E S
        ****************************************************************/
        public UI_Consultorio(Administrador unAdministrador)
        {
            InitializeComponent();
            inicializarPestañas();
            //----------------------------------------------------------------------------
            tipo = Modalidad.nuevo;
            pestañaTitular = EstadosPestañaTitular.sin_cambia_titular;
            //----------------------------------------------------------------------------
            actual_habilitacion = control_habilitacion.nueva();

            //  Cargamos las localidades en la interface.... (no en el tramite)
            this.bindingSource_localidades.DataSource = control_localidades.obtener();
            this.bindingSource_localidades.Insert(0, control_localidades.obtenerNueva());
            this.bindingSource_localidades.Insert(1, control_localidades.obtenerNinguna());

            // ????????????????????????????????????????????????????????????
            // Cargamos las profesiones en la interface.... 
            bindingSource_profesiones.DataSource = control_profesiones.obtener();
            deshabilitar_control_lista_eliminar();

           
        
      
            this.comboBox_localidad.SelectedIndex = 1;       
            
            actual_tramite = actual_habilitacion.Tramite_Matriculacion.ToList().First();
            actual_tramite.Administrador = unAdministrador;
            actual_consultorio = actual_tramite.Consultorio;

            bindingSource_consultorio_local.AddNew();  
            
            enlazarComponentes();             
        }
        


        public UI_Consultorio(Habilitacion unaHabilitacion)
        {
            InitializeComponent();            
            //----------------------------------------------------------------------------
            tipo = Modalidad.edicion;
            estadoTramite = EstadosTramites.en_curso;

            //----------------------------------------------------------------------------
            actual_habilitacion = unaHabilitacion;
            actual_tramite = actual_habilitacion.Tramite_Matriculacion.ToList().First(); ;
            actual_consultorio = actual_tramite.Consultorio;
            //----------------------------------------------------------------------------
            bindingSource_consultorio_local.Add(actual_consultorio.Local);
            bindingSource_consultorio_propietario.Add(actual_consultorio.Local.Propietarios.First());

            // Si hay algun titular definido
            if (actual_consultorio.titular_actual != null)
            {                
                bindingSource_titular_vive.Add(actual_consultorio.titular_actual.vive);
                pestañaTitular = EstadosPestañaTitular.con_cambia_titular;

                if (actual_consultorio.titular_actual is Profecional_colegio)
                {
                    bindingSource_titular_actual_profesional_colegio.Add(actual_consultorio.titular_actual);
                    asignacionPestañas();
                    seleccionarPestañaTramite();
                    seleccionarPestañaTitular_profesional_colegio();
                }
                else if (actual_consultorio.titular_actual is Profesional_otro_colegio)
                {
                    bindingSource_titular_actual_profesional_otro_colegio.Add(actual_consultorio.titular_actual);
                    asignacionPestañas();
                    seleccionarPestañaTramite();
                    seleccionarPestañaTitular_profesional_otro_colegio();
                }               
            }
            else
            {
                inicializarPestañas();
            }

            bindingSource_localidades.Add(actual_consultorio.Local.Localidad);


            if (actual_consultorio.Local.Propietarios.Count > 0)
            {
                bindingSource_consultorio_propietario.Add(actual_consultorio.Local.Propietarios.First());
            }
            else
            {
                bindingSource_consultorio_propietario.Add(new Propietario());
            }


            deshabilitar_control_lista_eliminar();

            if (actual_consultorio.plantel_profesional.OfType<Profecional_colegio>().ToList().Count > 0)
            {
                this.button_profesionales_eliminar_del_colegio.Enabled = true;
                bindingSource_plantel_profesionales_colegio.DataSource = actual_consultorio.plantel_profesional.OfType<Profecional_colegio>();
            }
            if (actual_consultorio.plantel_profesional.OfType<Profesional_otro_colegio>().ToList().Count > 0)
            {
                this.button_profesionales_eliminar_otro_colegio.Enabled = true;
                bindingSource_plantel_profesionales_otros_colegio.DataSource = actual_consultorio.plantel_profesional.OfType<Profesional_otro_colegio>();
            }


            if (actual_tramite.lista_plantel_cerrada)
            {
                cerrar_lista_profesionales();
            }

            enlazarComponentes();
            
        }
        
        /**************************************************************
        //                       M E T O D O S
        ****************************************************************/
        private void enlazarComponentes()
        {
            // Agregamos las instancias a los binding de cada pestaña
            bindingSource_habilitacion.Add(this.actual_habilitacion);
            bindingSource_tramites_matricula.DataSource = this.actual_tramite;
            bindingSource_consultorio.Add(this.actual_consultorio);

            bindingSource_consultorio_local.Add(this.actual_consultorio.Local);
            bindingSource_consultorio_propietario.DataSource = this.actual_consultorio.Local.Propietarios;
            
        }

        private void asignacionPestañas()
        {
            //---------------------------------------------------------------------------------------------------------------------
            this.pestaña_Alta = tabControl_consultorio.TabPages["tabPageAlta"];
            this.pestaña_Habilitacion = tabControl_consultorio.TabPages["tabPageHabilitacion"];
            this.pestaña_rematriculacion = tabControl_consultorio.TabPages["tabPageRematriculacion"];
            //---------------------------------------------------------------------------------------------------------------------
            this.pestañaTitular_otro_colegio = tabControl_consultorio.TabPages["tabPageTitular_profesionales_otro_colegio"];
            this.pestañaTitular_colegio = tabControl_consultorio.TabPages["tabPageTitular_profesionales_colegio"];
            this.pestañaTitular_inicio = tabControl_consultorio.TabPages["tabPageTitular_inicio"];
            //---------------------------------------------------------------------------------------------------------------------
            this.pestaña_Profesionales = tabControl_consultorio.TabPages["tabPageProfesionales"];            

            this.pestaña_requisitos = tabControl_consultorio.TabPages["tabPageRequisitos"];
            //---------------------------------------------------------------------------------------------------------------------
        }

        private void seleccionarPestañaTramite()
        {
            switch (estadoTramite)
            {
                case EstadosTramites.en_curso:
                    desactivarPestaña(pestaña_Habilitacion);
                    desactivarPestaña(pestaña_rematriculacion);
                    activarPestaña(pestaña_Alta);
                    break;
                case EstadosTramites.habilitado:
                    desactivarPestaña(pestaña_Alta);
                    desactivarPestaña(pestaña_rematriculacion);
                    activarPestaña(pestaña_Habilitacion);
                    break;
                case EstadosTramites.rematriculando:
                    desactivarPestaña(pestaña_Alta);
                    desactivarPestaña(pestaña_rematriculacion);
                    activarPestaña(pestaña_rematriculacion);
                    break;
                default:
                    break;
            }                   
        
        }

        private void seleccionarPestañaTitular_inicial()
        {
            desactivarPestaña(pestañaTitular_otro_colegio);
            desactivarPestaña(pestañaTitular_colegio);
            activarPestaña(pestañaTitular_inicio);
            // pongo el estado
            pestañasTitular = EstadosPestañasTitular.inicial;
        }

        private void inicializarPestañas()
        {
            
            asignacionPestañas();
            seleccionarPestañaTramite();
            seleccionarPestañaTitular_inicial();
 
        }


        private void seleccionarPestañaTitular_profesional_colegio()
        {
            activarPestaña(this.pestañaTitular_colegio);
            desactivarPestaña(this.pestañaTitular_otro_colegio);
            desactivarPestaña(this.pestañaTitular_inicio);
            seleccionarPestaña(this.pestañaTitular_colegio);

            // Sincronizo los sub estados de la pestaña
            this.button_titular_profesional_colegio_cambiarTitular.Visible = (pestañaTitular == EstadosPestañaTitular.con_cambia_titular);
         
            pestañasTitular = EstadosPestañasTitular.profesional_colegio;

        }

        private void sincronizarPestaña()
        {
        }

        private void seleccionarPestañaTitular_profesional_otro_colegio()
        {
            activarPestaña(this.pestañaTitular_otro_colegio);
            desactivarPestaña(this.pestañaTitular_colegio);
            desactivarPestaña(this.pestañaTitular_inicio);
            seleccionarPestaña(this.pestañaTitular_otro_colegio);

            // Sincronizo los sub estados de la pestaña
            this.button_titular_profesional_otro_colegio_cambiarTitular.Visible = (pestañaTitular == EstadosPestañaTitular.con_cambia_titular);

            pestañasTitular = EstadosPestañasTitular.profesional_otro_colegio;

        }

        private void seleccionarPestaña(TabPage pestaña)
        {            
            tabControl_consultorio.SelectedTab = pestaña;
        }

        private void activarPestaña(TabPage pestaña)
        {
            tabControl_consultorio.TabPages.Insert(1, pestaña);         
            
        }

        private void desactivarPestaña(TabPage pestaña)
        {
            tabControl_consultorio.TabPages.Remove(pestaña);            
        }

       

        private void activarTitular_profesional_colegio()
        {
        }
       
        //-------------------------------------------------------------------------------------------------          
        //metodo para limpiar campo
        private void limpiarcampo(Control contenedor)
        {
            foreach (Control obj in contenedor.Controls)
            {
                if (obj is TextBox)
                    obj.Text = "";
                else if (obj is GroupBox)
                    limpiarcampo(obj);
            }
        }

 //-------------------------------------------------------------------------------------------------          

        private void button_alta_guardar_Click(object sender, EventArgs e)
        {            
            try
            {
                this.bindingSource_habilitacion.EndEdit();
                this.bindingSource_habilitacion.SuspendBinding();
                
                if (tipo == Modalidad.nuevo)
                {                   
                        gardar_alta();
                        //-------------------------------------------
                        MessageBox.Show("Se guardo correctamente");              
    
                }
                else if (tipo == Modalidad.edicion)
                {
                    // ACtualizo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
                    guardar_edicion();
                    //-------------------------------------------
                    MessageBox.Show("Se guardaron correctamente los cambios");
                }
                else
                {
                    throw (new Exception("Modalidad (" + tipo + ") del Modulo incoherente. Se esperaba modalidad nuevo o edicion"));
                }

                this.bindingSource_habilitacion.ResumeBinding();
                              
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas para guardar: " + ex.Message.ToString());

            }
            
        }
        private void recolectar_binding()
        {
            recolectar_binding(actual_habilitacion);
        }

        private void recolectar_binding(Habilitacion unaHabilitacion)
        {
            Localidad unaLocalidad = (Localidad)bindingSource_localidades.Current;

            
            var un_consultorio = unaHabilitacion.Tramite_Matriculacion.First().Consultorio;

            un_consultorio.Local = (Local)bindingSource_consultorio_local.Current;
            un_consultorio.Local.Localidad = unaLocalidad;
            //---------------------------------------------------------------------------------------------------------------------------
            if (pestañasTitular == EstadosPestañasTitular.profesional_colegio)
            {
                un_consultorio.titular_actual = (Profecional_colegio)bindingSource_titular_actual_profesional_colegio.Current;
            }
            else if (pestañasTitular == EstadosPestañasTitular.profesional_otro_colegio)
            {
                un_consultorio.titular_actual = (Profesional_otro_colegio)bindingSource_titular_actual_profesional_otro_colegio.Current;
            }
            //------------------------------------------------------------------------------------------------
            if (bindingSource_consultorio_propietario.Count > 0)
            {
                // Si ya tengo algun propietario lo elimino
                if (un_consultorio.Local.Propietarios.Count > 0)
                {
                    un_consultorio.Local.Propietarios.Clear();
                }
              
                // Agrego el nuevo propietario...
                un_consultorio.Local.Propietarios.Add((Propietario)bindingSource_consultorio_propietario.Current);
            }
            //------------------------------------------------------------------------------------------------
            if (bindingSource_plantel_profesionales_otros_colegio.Count > 0)
            {
                foreach (Profesional_otro_colegio unProfesional in bindingSource_plantel_profesionales_otros_colegio.List)
                {
                    actual_tramite.Consultorio.plantel_profesional.Add(unProfesional);
                }
            }


            if (bindingSource_plantel_profesionales_colegio.Count > 0)
            {
                foreach (Profecional_colegio unProfesional in bindingSource_plantel_profesionales_colegio.List)
                {
                    actual_tramite.Consultorio.plantel_profesional.Add(unProfesional);
                }
            }
        }

        private void gardar_alta()
        {
            recolectar_binding();
            this.control_habilitacion.guardar(actual_habilitacion);
        
        }

        private void guardar_edicion()
        {
            recolectar_binding();
            // Actualizacion de entieddes
            this.control_habilitacion.actualizar(actual_habilitacion);
            // Eliminacion de entidades
            this.control_profesional.eliminar(lista_profecionales_eliminados);            
        }

       
       
        private void textBox_numeroTramite_KeyPress(object sender, KeyPressEventArgs e)
        {  
           //valida numeros

            if (validador)
            {
                if (Char.IsDigit(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsControl(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsSeparator(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
            }
         }  

        // Para titular
        private void button_agregar_del_colegio_profesional_Click(object sender, EventArgs e)
        {
            buscar_profesional_del_colegio();
                        
        }

        private void button_agregar_nuevo_titular_Click(object sender, EventArgs e)
        {

            bindingSource_titular_actual_profesional_otro_colegio.Clear();
            bindingSource_titular_actual_profesional_otro_colegio.AddNew();

            cargar_titular_profesional_otro_colegio_lugar();

            seleccionarPestañaTitular_profesional_otro_colegio();                             

        }

   
        public void cargar_titular_profesional_colegio_lugar()
        {
            Profesional unTitular = ((Profesional)bindingSource_titular_actual_profesional_colegio.Current);
            bindingSource_titular_vive.Clear();
            bindingSource_titular_vive.Add(unTitular.vive);
            
            // Aqui selecciono la pestaña.. dado que puede no haber elegido ningun profesional del colegio (cerrado la ventana)

            if (pestañasTitular != EstadosPestañasTitular.profesional_colegio)
            {
                seleccionarPestañaTitular_profesional_colegio();
            }
        }

        public void cargar_titular_profesional_otro_colegio_lugar()
        {
            Profesional unTitular = ((Profesional)bindingSource_titular_actual_profesional_otro_colegio.Current);
            unTitular.vive = new Lugar();

            bindingSource_titular_vive.Clear();
            bindingSource_titular_vive.Add(unTitular.vive);
        }

        private void textBox_nombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (validador)
            {
                if (Char.IsLetter(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
            }
        }


        private void textBox_consultorio_nombreOrazonSocial_KeyPress(object sender, KeyPressEventArgs e)
        {
        }

        
        private void textBox_titular_email_Validating(object sender, CancelEventArgs e)
        {
            if (validador)
            {
                if (!(Regex.Match(textBox_titular_profesional_colegio_email.Text, @"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$").Success == true))
                    errorProvider1.SetError(textBox_titular_profesional_colegio_email, "Ingrese una direccion valida");
                else
                    errorProvider1.SetError(textBox_titular_profesional_colegio_email, "");
            }
        
        }

        private void panel_titular_campos_Paint(object sender, PaintEventArgs e)
        {

        }

        private void textBox_titular_email_TextChanged(object sender, EventArgs e)
        {

        }
        //-----------------------------------------------------------------------------------------------------------
        private void textBox_titular_email_auxiliar_Validating(object sender, CancelEventArgs e)
        {
            if (validador)
            {
                if (textBox_titular_profesional_colegio_email_auxiliar.Text.Length == 0)
                    errorProvider1.SetError(textBox_titular_profesional_colegio_email_auxiliar, "");
                else if (!(Regex.Match(textBox_titular_profesional_colegio_email_auxiliar.Text, @"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$").Success == true))
                    errorProvider1.SetError(textBox_titular_profesional_colegio_email_auxiliar, "Ingrese una direccion valida");
                else
                    errorProvider1.SetError(textBox_titular_profesional_colegio_email_auxiliar, "");
            }
        }
        //-----------------------------------------------------------------------------------------------------------
        private void textBox_consultorio_email_Validating(object sender, CancelEventArgs e)
        {
            if (validador)
            {
                if (textBox_consultorio_email.Text.Length == 0)
                    errorProvider1.SetError(textBox_consultorio_email, "");
                else if (!(Regex.Match(textBox_consultorio_email.Text, @"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$").Success == true))
                    errorProvider1.SetError(textBox_consultorio_email, "Ingrese una direccion valida");
                else
                    errorProvider1.SetError(textBox_consultorio_email, "");
            }
        }

       

                //-----------------------------------------------------------------------------------------------------------
        //limpia el campo de la pestaña alta 
        private void limpiar_Click(object sender, EventArgs e)
        {
            this.bindingSource_habilitacion.Clear();
            this.bindingSource_tramites_matricula.Clear();
        }
        
        //-----------------------------------------------------------------------------------------------------------
        private void button3_Click(object sender, EventArgs e)
        {
            
            limpiarcampo(panel_titular_general_profesional_colegio);
        }
        //-----------------------------------------------------------------------------------------------------------
        private void button4_Click(object sender, EventArgs e)
        {
            bindingSource_consultorio.Clear();
            limpiarcampo(panel_consultorio);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            limpiarcampo(panel_requisitos_principal);
        }



        private void label31_Click(object sender, EventArgs e)
        {

        }

        private void button_alta_cancelar_Click(object sender, EventArgs e)
        {this.Close();}

        private void button9_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void comboBox_localidad_SelectedIndexChanged(object sender, EventArgs e)
        {
            //this.textBox_consultorio_departamento.Text = ((Localidad)bindingSource_localidades.Current).Departamento.nombre;

            bindingSource_departamento.Clear();
            if (bindingSource_localidades.Current != null)
            {
                actual_localidad = (Localidad)this.comboBox_localidad.SelectedItem;
               
                if(actual_localidad.nombre == "Nueva")
                { 
                  Localidades.UI_Localidades loc = new Localidades.UI_Localidades();
                  loc.Show();
                }
                     
                else
                 {
                     bindingSource_departamento.Add((actual_localidad).Departamento);
                 }

           }
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void button_agregar_otro_colegio_Click(object sender, EventArgs e)
        {

            this.bindingSource_plantel_profesionales_otros_colegio.AddNew();
            ((Profesional)this.bindingSource_plantel_profesionales_otros_colegio.Current).fecha_incorporacion = DateTime.Now;

            bindingSource_plantel_profesionales_otros_colegio.EndEdit();

            // Si despues de agregar un elemento en total hay uno es por que antes estaba en cero
            if (this.bindingSource_plantel_profesionales_otros_colegio.Count == 1)
            {
                this.button_profesionales_eliminar_otro_colegio.Enabled = true;
            }
             
        }

      
        private void radioButton_requisito_si_CheckedChanged(object sender, EventArgs e)
        {
             
            
            Combobox_requisito_persona_inpecciono.Enabled = true;

        }

        private void radioButton_requisito_no_CheckedChanged(object sender, EventArgs e)
        {
        Combobox_requisito_persona_inpecciono.Enabled = false;
        Combobox_requisito_persona_inpecciono.Text="Seleccione";
        }

        private void button_titular_profesional_colegio_limpiar_Click(object sender, EventArgs e)
        {
            
            limpiarcampo(panel_titular_general_profesional_colegio);
        }

        private void button_titular_profesional_otro_colegio_limpiar_Click(object sender, EventArgs e)
        {
            limpiarcampo(panel_titular_general_profesional_otro_colegio);
        }

        private void button_alta_limpiar_Click(object sender, EventArgs e)
        {
            limpiarcampo(panel_alta_numero_tramite);
            bindingSource_tramites_matricula.Clear();
            limpiarcampo(panel_alta_numero_matricula);
        }

        private void button_consultorio_limpiar_Click(object sender, EventArgs e)
        {
           bindingSource_consultorio_local.Clear();
           bindingSource_consultorio.Clear();
              
        }
       
        private void button_requisitos_limpiar_Click(object sender, EventArgs e)
        {
            limpiarcampo(panel_requisitos_principal);
            limpiarcampo(panel_requisitos_aprobado);
            Combobox_requisito_persona_inpecciono.Text = "Seleccione";
        }

        private void button_titular_profesional_colegio_eliminar_Click(object sender, EventArgs e)
        {
            eliminar_titular_actual_colegio();
        }

        private void eliminar_titular_actual_colegio()
        {
            this.bindingSource_titular_actual_profesional_colegio.Clear();
            this.bindingSource_titular_vive.Clear();

            seleccionarPestañaTitular_inicial();
        }

        private void button_titular_profesional_otro_colegio_eliminar_Click(object sender, EventArgs e)
        {

            eliminar_titular_actual_otro_colegio();
        }

        private void eliminar_titular_actual_otro_colegio()
        {
            this.bindingSource_titular_actual_profesional_otro_colegio.Clear();
            this.bindingSource_titular_vive.Clear();

            seleccionarPestañaTitular_inicial();
            seleccionarPestaña(this.pestañaTitular_inicio);
        }
        
        private void button_agregar_del_colegio_profesionales_Click(object sender, EventArgs e)
        {
            buscar_profesional_del_colegio();
        }


        private void buscar_profesional_del_colegio()
        {
            UI_BusquedaProfesionalColegio ui = new UI_BusquedaProfesionalColegio();

            // Agrego manipulador de evento
            ui.cuandoSeleccionaUno += new UI_BusquedaProfesionalColegio.seleccionado(profesional_seleccionado);

            ui.Show();     
        }


        private void profesional_seleccionado(Profesional unProfesional)
        {
            // Le pongo la fecha actual, al profesional,como la de incorporacion
            unProfesional.fecha_incorporacion = DateTime.Now;

            // Si estamos en la pestaña de titilar (como un profesional del colegio)
            if (tabControl_consultorio.SelectedTab == pestañaTitular_colegio)
            {
                bindingSource_titular_actual_profesional_colegio.Clear();
                bindingSource_titular_actual_profesional_colegio.Add(unProfesional);

                cargar_titular_profesional_colegio_lugar();
                seleccionarPestañaTitular_profesional_colegio();
                

            }
            // Si estamos en la pestaña de profesionales
            else if (tabControl_consultorio.SelectedTab == pestaña_Profesionales)
            {
                bindingSource_plantel_profesionales_colegio.Add(unProfesional);
            }                      

            bindingSource_plantel_profesionales_colegio.EndEdit();


        }

        private void button_eliminar_profecional_Click(object sender, EventArgs e)
        {
            if (bindingSource_plantel_profesionales_colegio.Count > 0)
            {
                // Si estamos editando
                if (tipo == Modalidad.edicion)
                {
                    // Registramos la baja para su futura eliminacion
                    lista_profecionales_eliminados.Add(this.DataGridView_profesionales_colegio.SelectedRows[0].DataBoundItem as Profesional);
                }

                bindingSource_plantel_profesionales_colegio.RemoveCurrent();
                bindingSource_plantel_profesionales_colegio.EndEdit();

                // Si despues de eliminar no me quedo ninguna (significa que elimine el ultimo)
                if (bindingSource_plantel_profesionales_colegio.Count == 0)
                {
                    this.button_profesionales_eliminar_del_colegio.Enabled = false;
                }

            
            }
        }

        private void button_eliminar_profecional_otro_colegio_Click(object sender, EventArgs e)
        {
            if (bindingSource_plantel_profesionales_otros_colegio.Count > 0)
            {
                // Si estamos editando
                if (tipo == Modalidad.edicion)
                {
                    // Registramos la baja para su futura eliminacion
                    lista_profecionales_eliminados.Add(this.DataGridView_profesionales_otros_colegios.SelectedRows[0].DataBoundItem as Profesional);
                }

                bindingSource_plantel_profesionales_otros_colegio.RemoveCurrent();
                bindingSource_plantel_profesionales_colegio.EndEdit();

                // Si despues de eliminar no me quedo ninguna (significa que elimine el ultimo)
                if (bindingSource_plantel_profesionales_otros_colegio.Count == 0)
                {
                    this.button_profesionales_eliminar_otro_colegio.Enabled = false;
                }


            }
        }


        private void button_titular_profesional_colegio_cambiarTitular_Click(object sender, EventArgs e)
        {
            var titular = this.bindingSource_titular_actual_profesional_colegio.Current;
      
            this.bindingSource_titulares_anteriores_profesionales_colegio.Add(titular);

            eliminar_titular_actual_colegio();
        }

        private void button_titular_profesional_otro_colegio_cambiarTitular_Click(object sender, EventArgs e)
        {
            var titular = this.bindingSource_titular_actual_profesional_otro_colegio.Current;

            this.bindingSource_titulares_anteriores_profesionales_otros_colegios.Add(titular);

            eliminar_titular_actual_otro_colegio();
        }


        /*private void button_consultorio_propietario_titular_actual_Click(object sender, EventArgs e)
        {

            this.textBox_consultorio_titularPropiedad_nombre.ReadOnly = true;
            this.textBox_consultorio_titularPropiedad_apellido.ReadOnly = true;

            switch (pestañasTitular)
            {
                case EstadosPestañasTitular.inicial:
                    break;
                case EstadosPestañasTitular.profesional_colegio:
                    bindingSource_consultorio_propietario.Clear();
                    bindingSource_consultorio_propietario.Add((Propietario)((Profecional_colegio)bindingSource_titular_actual_profesional_colegio.Current).toPropietario());
         
                    break;

                case EstadosPestañasTitular.profesional_otro_colegio:
                    bindingSource_consultorio_propietario.Clear();
                    bindingSource_consultorio_propietario.Add((Propietario)((Profesional_otro_colegio)bindingSource_titular_actual_profesional_otro_colegio.Current).toPropietario());
                                       
                    break;              
            }
        }
        */
        private void button_consultorio_propietario_nuevo_Click(object sender, EventArgs e)
        {
            this.textBox_consultorio_titularPropiedad_nombre.ReadOnly = false;
            this.textBox_consultorio_titularPropiedad_apellido.ReadOnly = false;
            
            bindingSource_consultorio_propietario.Clear();
            bindingSource_consultorio_propietario.AddNew();
        }

        private void tabControl_consultorio_Selected(object sender, TabControlEventArgs e)
        {
            // Si se selecciono la pestaña de requisitos...
            if (this.tabControl_consultorio.SelectedTab == pestaña_requisitos)
            {

                var test_habilitacion = actual_habilitacion;
                
                // Recolecto el binding para la habilitacion de test
                recolectar_binding(test_habilitacion);
                
                bindingSource_requisitos.Clear();
                bindingSource_requisitos.Add(control_habilitacion.requisitos(test_habilitacion));
                bindingSource_requisitos.EndEdit();
             

                var x = (Requisitos)bindingSource_requisitos.Current;
            }
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void UI_Consultorio_Load(object sender, EventArgs e)
        {
            toolTip_limpiar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_limpiar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_limpiar.ReshowDelay = 500;
            toolTip_limpiar.ShowAlways = true;
            toolTip_limpiar.SetToolTip(this.button_alta_limpiar, "Limpiar Campos");


            toolTip_titular_limpiar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_titular_limpiar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_titular_limpiar.ReshowDelay = 500;
            toolTip_titular_limpiar.ShowAlways = true;
            toolTip_titular_limpiar.SetToolTip(this.button_consultorio_limpiar, "Limpiar Campos");


            toolTip_requisitos_limpiar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_requisitos_limpiar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_requisitos_limpiar.ReshowDelay = 500;
            toolTip_requisitos_limpiar.ShowAlways = true;
            toolTip_requisitos_limpiar.SetToolTip(this.button_requisitos_limpiar , "Limpiar Campos");


            toolTip_requisitos_imprimir.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_requisitos_imprimir.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_requisitos_imprimir.ReshowDelay = 500;
            toolTip_requisitos_imprimir.ShowAlways = true;
            toolTip_requisitos_imprimir.SetToolTip(this.button_imprimir, "IMPRIMIR");

            toolTip_profesionales_del_colegio_agregar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_profesionales_del_colegio_agregar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_profesionales_del_colegio_agregar.ReshowDelay = 500;
            toolTip_profesionales_del_colegio_agregar.ShowAlways = true;
            toolTip_profesionales_del_colegio_agregar.SetToolTip(this.button_profesionales_agregar_del_colegio, " Agregar");

            toolTip_profesionales_de_colegio_eliminar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_profesionales_de_colegio_eliminar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_profesionales_de_colegio_eliminar.ReshowDelay = 500;
            toolTip_profesionales_de_colegio_eliminar.ShowAlways = true;
            toolTip_profesionales_de_colegio_eliminar.SetToolTip(this.button_profesionales_eliminar_del_colegio, "Eliminar");

            toolTip_profesionales_de_otro_colegio_agregar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_profesionales_de_otro_colegio_agregar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_profesionales_de_otro_colegio_agregar.ReshowDelay = 500;
            toolTip_profesionales_de_otro_colegio_agregar.ShowAlways = true;
            toolTip_profesionales_de_otro_colegio_agregar.SetToolTip(this.button_profesionales_agregar_otro_colegio, " Agregar");

            toolTip_profesionales_de_otro_colegio_eliminar.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_profesionales_de_otro_colegio_eliminar.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_profesionales_de_otro_colegio_eliminar.ReshowDelay = 500;
            toolTip_profesionales_de_otro_colegio_eliminar.ShowAlways = true;
            toolTip_profesionales_de_otro_colegio_eliminar.SetToolTip(this.button_profesionales_eliminar_otro_colegio, "Eliminar");
        
        
        
            toolTip_cerrar_lista.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_cerrar_lista.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_cerrar_lista.ReshowDelay = 500;
            toolTip_cerrar_lista.ShowAlways = true;
            toolTip_cerrar_lista.SetToolTip(this.button_profesionales_lista, "Cerrar Lista");


            toolTip_imprimir_lista.AutoPopDelay = 5000; //TIEMPO DE DURACION DEL MENSAJE
            toolTip_imprimir_lista.InitialDelay = 500; //TIEMPO EN Q EMERGE EL MENSAJE 
            toolTip_imprimir_lista.ReshowDelay = 500;
            toolTip_imprimir_lista.ShowAlways = true;
            toolTip_imprimir_lista.SetToolTip(this.button_profesionales_imprimir, "Imprimir Lista");
                
        
        }

        private void button_profesionales_lista_Click(object sender, EventArgs e)
        {
            if ((this.bindingSource_plantel_profesionales_colegio.Count > 0) & (this.bindingSource_plantel_profesionales_otros_colegio.Count > 0))
            {
                bindingSource_plantel_profesionales_colegio.EndEdit();
                bindingSource_plantel_profesionales_otros_colegio.EndEdit();

                if (this.button_profesionales_lista.Tag == "Cerrar Lista")
                {
                    cerrar_lista_profesionales();

                }
                else if (this.button_profesionales_lista.Tag == "Abrir Lista")
                {
                    abrir_lista_profesionales();
                }
            }
            else
            {
                MessageBox.Show(this, "La listas de profesionales no contienen profesionales por lo tanto no se pueden cerrar", "Operacion no valida");
            }
        }

        private void cerrar_lista_profesionales()
        {
            actual_tramite.lista_plantel_cerrada = true;
            edicion_lista_profesionales(false);
            this.button_profesionales_lista.Tag = "Abrir Lista";
        }

        private void abrir_lista_profesionales()
        {
            actual_tramite.lista_plantel_cerrada = false;
            edicion_lista_profesionales(true);
            this.button_profesionales_lista.Tag = "Cerrar Lista";
        }

        private void edicion_lista_profesionales(Boolean valor)
        {                
            this.button_profesionales_agregar_otro_colegio.Enabled = valor;
            this.button_profesionales_agregar_del_colegio.Enabled = valor;
            this.button_profesionales_eliminar_otro_colegio.Enabled = valor;
            this.button_profesionales_eliminar_del_colegio.Enabled = valor;
        }

        private void deshabilitar_control_lista_eliminar()
        {
            this.button_profesionales_eliminar_del_colegio.Enabled = false;
            this.button_profesionales_eliminar_otro_colegio.Enabled = false;
        }
        private void deshabilitar_controles_lista_profesionales_colegio()
        {
            this.panel_profesionales_control_lista_colegio.Enabled = false;
        }
        
        private void deshabilitar_controles_lista_profesionales_otros_colegios()
        {
            this.panel_profesionales_control_lista_otros_colegios.Enabled = false;
        }

        private void habilitar_controles_lista_profesionales_colegio()
        {
            this.panel_profesionales_control_lista_colegio.Enabled = true;
        }

        private void habilitar_controles_lista_profesionales_otros_colegios()
        {
            this.panel_profesionales_control_lista_otros_colegios.Enabled = true;
        }
         
  } 
        
    
}
